//=======================================Copyright(c)===========================================
// 								  深圳易马达科技有限公司
//---------------------------------------文件信息----------------------------------------------
//文件名   	: BatteryInfoGetSetApi.c
//创建人  	: Handry
//创建日期	: 
//描述	    : 电池数据信息GetSet接口源文件
//-----------------------------------------------当前版本修订----------------------------------
//修改人   	:
//版本	    :
//修改日期	:
//描述	    : 电池数据获取
//=============================================================================================

//=============================================================================================
//包含头文件
//=============================================================================================
#include "BatteryInfoGetSetApi.h"
#include "ShutDownMode.h"
#include "Sample.h"
#include "ParaCfg.h"
#include "SysState.h"
#include "HMAC.h"
#include "CanComm.h"

//=============================================================================================
//全局变量定义
//=============================================================================================

//=============================================================================================
//声明接口函数
//=============================================================================================
//=============================================================================================
//函数名称	: u16 BatteryInfoGetRateVoltage(void)
//输入参数	: void
//输出参数	: 额定电压 10mV
//函数功能	: 获取额定电压
//注意事项	:
//=============================================================================================
u16 BatteryInfoGetRateVoltage(void)
{
    return BAT_NORM_VOLT * BAT_CELL_NUM / 10;
}

//=============================================================================================
//函数名称	: u16 BatteryInfoGetRateCurrent(void)
//输入参数	: void
//输出参数	: 额定电流
//函数功能	: 获取额定电流 10mA
//注意事项	:
//=============================================================================================
u16 BatteryInfoGetRateCurrent(void)
{
    return BAT_NORM_CAP / 10;
}

//=============================================================================================
//函数名称	: u8 *BatteryInfoGetBID(void)
//输入参数	: void
//输出参数	: 电池BID数据地址指针
//函数功能	: 获取电池BID数据
//注意事项	:
//=============================================================================================
u16 *BatteryInfoGetBID(void)
{
    return &gConfig.sn[1];
}

//=============================================================================================
//函数名称	: u16 BatteryInfoGetPackVoltage(void)
//输入参数	: void
//输出参数	: 电池电压
//函数功能	: 获取电池电压 10mV
//注意事项	:
//=============================================================================================
u16 BatteryInfoGetPackVoltage(void)
{
    return gBatteryInfo.Data.TolVolt;
}

//=============================================================================================
//函数名称	: u16 BatteryInfoGetPackCurrent(void)
//输入参数	: void
//输出参数	: 电池电流
//函数功能	: 获取电池电流 10mA
//注意事项	:
//=============================================================================================
s16 BatteryInfoGetPackCurrent(void)
{
    return gBatteryInfo.Data.Curr;
}

//=============================================================================================
//函数名称	: u16 BatteryInfoGetMinCellVolt(void)
//输入参数	: void
//输出参数	: 单体电压最小值
//函数功能	: 获取单体电压最小值 mV
//注意事项	:
//=============================================================================================
u16 BatteryInfoGetMinCellVolt(void)
{
	return gBatteryInfo.VoltChara.MinVolt;
}

//=============================================================================================
//函数名称	: u16 BatteryInfoGetMaxCellVolt(void)
//输入参数	: void
//输出参数	: 单体电压最大值
//函数功能	: 获取单体电压最大值 mV
//注意事项	:
//=============================================================================================
u16 BatteryInfoGetMaxCellVolt(void)
{
	return gBatteryInfo.VoltChara.MaxVolt;
}

//=============================================================================================
//函数名称	: u8 BatteryInfoGetMinCellNum(void)
//输入参数	: void
//输出参数	: 单体电压最小值电池编号
//函数功能	: 获取单体电压最小值电池编号
//注意事项	:
//=============================================================================================
u8 BatteryInfoGetMinCellNum(void)
{
	return gBatteryInfo.VoltChara.MinVNum;
}

//=============================================================================================
//函数名称	: u8 BatteryInfoGetMaxCellNum(void)
//输入参数	: void
//输出参数	: 单体电压最大值电池编号
//函数功能	: 获取单体电压最大值电池编号
//注意事项	:
//=============================================================================================
u8 BatteryInfoGetMaxCellNum(void)
{
	return gBatteryInfo.VoltChara.MaxVNum;
}

//=============================================================================================
//函数名称	: s16 BatteryInfoGetRecentMaxChgCurr(void)
//输入参数	: void
//输出参数	: 电池从柜子拿出来到放回到柜子期间最大充电电流
//函数功能	: 获取电池从柜子拿出来到放回到柜子期间最大充电电流 10mA
//注意事项	:
//=============================================================================================
s16 BatteryInfoGetRecentMaxChgCurr(void)
{
	return gBatteryInfo.CurrChara.MaxChgCurrRecent;
}

//=============================================================================================
//函数名称	: s16 BatteryInfoGetRecentMaxDchgCurr(void)
//输入参数	: void
//输出参数	: 电池从柜子拿出来到放回到柜子期间最大放电电流
//函数功能	: 获取电池从柜子拿出来到放回到柜子期间最大放电电流 10mA
//注意事项	:
//=============================================================================================
s16 BatteryInfoGetRecentMaxDchgCurr(void)
{
	return gBatteryInfo.CurrChara.MaxDchgCurrRecent;
}

//=============================================================================================
//函数名称	: u16 BatteryInfoGetHighCurrDet(void)
//输入参数	: void
//输出参数	: 大放电电流检测字
//函数功能	: 获取大放电电流检测字
//注意事项	:
//=============================================================================================
u16 BatteryInfoGetHighCurrDet(void)
{
	return (((u16)gBatteryInfo.CurrChara.PerCurr30S) << 10)  | (((u16)gBatteryInfo.CurrChara.MaxCurr30S) << 4) | 
              ((u16)gBatteryInfo.CurrChara.HighCurrTime);
}

//=============================================================================================
//函数名称	: u16 BatteryInfoGetCycle(void)
//输入参数	: void
//输出参数	: 电池循环次数
//函数功能	: 获取电池循环次数
//注意事项	:
//=============================================================================================
u16 BatteryInfoGetCycle(void)
{
    return gBatteryInfo.Data.ChgDchgTimes;
}

//=============================================================================================
//函数名称	: s16 BatteryInfoGetChgMosTemp(void)
//输入参数	: void
//输出参数	: 充电MOS温度
//函数功能	: 获取充电MOS温度 0.1℃
//注意事项	:
//=============================================================================================
s16 BatteryInfoGetChgMosTemp(void)
{
    return gSampleData.PCBTemp;
}

//=============================================================================================
//函数名称	: s16 BatteryInfoGetDchgMosTemp(void)
//输入参数	: void
//输出参数	: 放电MOS温度
//函数功能	: 获取充电MOS温度 0.1℃
//注意事项	:
//=============================================================================================
s16 BatteryInfoGetDchgMosTemp(void)
{
    return gSampleData.PCBTemp;
}

//=============================================================================================
//函数名称	: s16 BatteryInfoGetFuelTemp(void)
//输入参数	: void
//输出参数	: 电量计温度
//函数功能	: 获取电量计温度 0.1℃
//注意事项	:
//=============================================================================================
s16 BatteryInfoGetFuelTemp(void)
{
    return gBatteryInfo.Addit.FuelTemp;
}

//=============================================================================================
//函数名称	: s16 BatteryInfoGetConnTemp(void)
//输入参数	: void
//输出参数	: 连接器温度
//函数功能	: 获取连接器温度 0.1℃
//注意事项	:
//=============================================================================================
s16 BatteryInfoGetConnTemp(void)
{
    return gSampleData.ConnTemp;
}

//=============================================================================================
//函数名称	: s16 BatteryInfoBatteryTemp(u8 Num)
//输入参数	: 电池温度序号 0 - 1 
//输出参数	: 电池温度
//函数功能	: 获取电池温度 0.1℃
//注意事项	:
//=============================================================================================
s16 BatteryInfoBatteryTemp(u8 Num)
{
    return gBatteryInfo.Data.CellTemp[Num];
}

//=============================================================================================
//函数名称	: s16 BatteryInfoGetTVSTemp(void)
//输入参数	: void
//输出参数	: TVS温度
//函数功能	: 获取TVS温度 0.1℃
//注意事项	:
//=============================================================================================
s16 BatteryInfoGetTVSTemp(void)
{
    return gSampleData.TVSTemp;
}

//=============================================================================================
//函数名称	: s16 BatteryInfoGetFuseTemp(void)
//输入参数	: void
//输出参数	: 保险丝温度
//函数功能	: 获取保险丝温度 0.1℃
//注意事项	:
//=============================================================================================
s16 BatteryInfoGetFuseTemp(void)
{
    return gSampleData.FuseTemp;
}

//=============================================================================================
//函数名称	: u16 BatteryInfoGetBattFault(u8 Num)
//输入参数	: 0:设备故障字1; 1:设备故障字2; 3:运行故障字1;4:运行故障字2
//输出参数	: 电池故障信息
//函数功能	: 获取电池故障信息
//注意事项	:
//=============================================================================================
u16 BatteryInfoGetBattFault(u8 Num)
{
    return gBatteryInfo.Fault.FaultInfo[Num];
}

//=============================================================================================
//函数名称	: u16 BatteryInfoGetBattAlarm(u8 Num)
//输入参数	: 0:运行告警字1; 1:运行告警字2
//输出参数	: 电池告警信息
//函数功能	: 获取电池告警信息
//注意事项	:
//=============================================================================================
u16 BatteryInfoGetBattAlarm(u8 Num)
{
    return gBatteryInfo.Fault.AlarmInfo[Num];
}

//=============================================================================================
//函数名称	: u16 BatteryInfoGetSOC(void)
//输入参数	: void
//输出参数	: 电池SOC
//函数功能	: 获取电池SOC
//注意事项	:
//=============================================================================================
u16 BatteryInfoGetSOC(void)
{
    return gBatteryInfo.Data.FiltSOC;
}

//=============================================================================================
//函数名称	: s16 BatteryInfoGetMinTemp(void)
//输入参数	: void
//输出参数	: 单体温度最小值
//函数功能	: 获取单体温度最小值 0.1℃
//注意事项	:
//=============================================================================================
s16 BatteryInfoGetMinTemp(void)
{
	return gBatteryInfo.TempChara.MinTemp;
}

//=============================================================================================
//函数名称	: s16 BatteryInfoGetMaxTemp(void)
//输入参数	: void
//输出参数	: 单体温度最大值
//函数功能	: 获取单体温度最大值 0.1℃
//注意事项	:
//=============================================================================================
s16 BatteryInfoGetMaxTemp(void)
{
	return gBatteryInfo.TempChara.MaxTemp;
}

//=============================================================================================
//函数名称	: u8 BatteryInfoGetMinTempNum(void)
//输入参数	: void
//输出参数	: 单体温度最小值电池编号
//函数功能	: 获取单体温度最小值电池编号
//注意事项	:
//=============================================================================================
u8 BatteryInfoGetMinTempNum(void)
{
	return gBatteryInfo.TempChara.MinTNum;
}

//=============================================================================================
//函数名称	: u8 BatteryInfoGetMinTempNum(void)
//输入参数	: void
//输出参数	: 单体温度最大值电池编号
//函数功能	: 获取单体温度最大值电池编号
//注意事项	:
//=============================================================================================
u8 BatteryInfoGetMaxTempNum(void)
{
	return gBatteryInfo.TempChara.MaxTNum;
}

//=============================================================================================
//函数名称	: e_ChgDchgStatus BatteryInfoGetChgDchgSta(void)
//输出参数	: 充放电状态；0：空闲；1：充电；2：放电
//静态变量	: void
//功    能	: 获取充放电标志
//注意事项	:
//=============================================================================================
e_ChgDchgStatus BatteryInfoGetChgDchgSta(void)
{
	return SysStateGetChgDchgSta();
}

//=============================================================================================
//函数名称	: u8 BatteryInfoIsExEnterLightSleep()
//输出参数	: 0：外置模块需要进入浅度休眠；1：外置模块不需要进入浅度休眠
//静态变量	: void
//功    能	: 获取浅度休眠标志
//注意事项	:
//=============================================================================================
u8 BatteryInfoIsExEnterLightSleep(void)
{
    return (True == gSHDNCond.IdleFlag.IdleFlagBit.EnterLightSleep);
}

//=============================================================================================
//函数名称	: u8 BatteryInfoIsEnterLightSleep()
//输出参数	: 1：外置模块需要唤醒上报；0：外置模块不需要需要唤醒上报
//静态变量	: void
//功    能	: 获取唤醒上报标志
//注意事项	:
//=============================================================================================
u8 BatteryInfoExIsWakeUp(void)
{
    return (True == gSHDNCond.IdleFlag.IdleFlagBit.WakeUp);
}

//=============================================================================================
//函数名称	: void BatteryInfoExClrWakeUp(void)
//输出参数	: 
//静态变量	: void
//功    能	: 清除唤醒上报标志
//注意事项	:
//=============================================================================================
void BatteryInfoExClrWakeUp(void)
{
    gSHDNCond.IdleFlag.IdleFlagBit.WakeUp = False;
}

//=============================================================================================
//函数名称	: void BatteryInfoExSetAwakened(void)
//输出参数	: 
//静态变量	: void
//功    能	: 设置模块在休眠过程中被唤醒标志
//注意事项	:
//=============================================================================================
void BatteryInfoExSetAwakened(void)
{
    gSHDNCond.IdleFlag.IdleFlagBit.IsAwakened = True;
}

//=============================================================================================
//函数名称	: void BatteryInfoExClrAwakened(void)
//输出参数	: 
//静态变量	: void
//功    能	: 清除模块在休眠过程中被唤醒标志
//注意事项	:
//=============================================================================================
void BatteryInfoExClrAwakened(void)
{
    gSHDNCond.IdleFlag.IdleFlagBit.IsAwakened = False;
}

//=============================================================================================
//函数名称	: u8 BatteryInfoExGetIsAwakened(void)
//输出参数	: 
//静态变量	: void
//功    能	: 获取模块在休眠过程中是否唤醒标志
//注意事项	:
//=============================================================================================
u8 BatteryInfoExGetIsAwakened(void)
{
    return gSHDNCond.IdleFlag.IdleFlagBit.IsAwakened == True;
}

#ifdef CANBUS_MODE_JT808_ENABLE

extern JT808 g_Jt;
//=============================================================================================
//函数名称	: void GPSMsgInfoGet(void)
//输出参数	: 
//静态变量	: void
//功    能	: 获取GPS信息
//注意事项	:
//=============================================================================================
pGPSMSGInfo GPSMsgInfoGet(void)
{
	return & g_Jt.gpsmsgInfo ;
}

//=============================================================================================
//函数名称	: void GPRSMsgInfoGet(void)
//输出参数	: 
//静态变量	: void
//功    能	: 获取GPRS信息
//注意事项	:
//=============================================================================================
pGPRSMSGInfo GPRSMsgInfoGet(void)
{
	return & g_Jt.gprsmsgInfo ;
}

//=============================================================================================
//函数名称	: void BLEMsgInfoGet(void)
//输出参数	: 
//静态变量	: void
//功    能	: 获取BLE信息
//注意事项	:
//=============================================================================================
pBLEMSGInfo BLEMsgInfoGet(void)
{
	return &g_Jt.BLEmsgInfo ;
}

//=============================================================================================
//函数名称	: u8 BatteryInfoIsBattAuth(void)
//输出参数	: 0：电池未认证;1：电池已认证
//静态变量	: void
//功    能	: 获取电池是否认证
//注意事项	:
//=============================================================================================
u8 BatteryInfoIsBattAuth(void)
{
    return  False != HMACReadCertifiSta();
}

//=============================================================================================
//函数名称	: u8 BatteryInfoSetCanReset(void)
//输出参数	: void
//静态变量	: void
//功    能	: 复位CAN标志置位
//注意事项	:
//=============================================================================================
void BatteryInfoSetCanReset(void)
{
    gStructCanFlag.DeviceFlag.DeviceFlagBit.IsCanRst = True;
}

#endif //CANBUS_MODE_JT808_ENABLE

/*****************************************end of BatteryInfoGetSetApi.c*****************************************/
